package com.C1对象及变量的并发访问.S1synchronized同步方法.S3synchronized方法与对象锁.B锁重入Synchronized;

/**
 * @Auther: SJZ    2907374717@qq.com
 * @Date: 2019/3/14 21:57
 * @Description:锁重入：synchronized Reentry
 *
 * 关键字synchronized 拥有锁重入功能，也就是在使用synchronized时，当一个线程得到一个对象锁后，
 * 再次请求此对象锁时，是可以再次得到该对象的锁的，这证明在一个synchronized方法/块的内部调用本类
 * 的其他synchronized方法/块时，是永远可以得到锁的。
 *
 *
 * 可重入锁概念：
 * 自己可以再次获取自己的内部锁，比如线程1获得了某个对象的锁，此时这个对象还没有释放锁，
 * 当其再次想要获取这个对象的锁的时候还是可以获取的，如果不可以，就会造成死锁。
 * “重入锁支持父子类的环境”

 */
public class ReentryTest {
    synchronized public void service1(){
        System.out.println("service1");
        service2();
    }
    synchronized public void service2(){
        System.out.println("service2");
        service3();
    }
    synchronized public void service3(){
        System.out.println("service3");
    }

    public static void main(String[] args) {
        MyThread myThread=new MyThread();
        myThread.start();
    }

    static  class  MyThread extends Thread{
        public void run(){
            ReentryTest reentryTest= new ReentryTest();
            reentryTest.service1();
        }
    }



}
